package JavaSE;
//调整数组顺序使得奇数位于偶数之前。调整之后，不关心大小顺序。
//如数组：[1,2,3,4,5,6]
//调整后可能是：[1, 5, 3, 4, 2, 6]
import java.util.Scanner;
import java.util.Arrays;
public class time_2025_07_16调整数组顺序 {
    public static int[] reorderArray(int[] arr){//此法没有直接修改数组元素内部的值，创建的是新的数组
        int[] swap = new int[arr.length];
        int oddIndex = 0; // 奇数的索引
        int evenIndex = arr.length-1;
        for(int num:arr){
            if(num%2!=0){
                swap[oddIndex++] = num;
            }
            else{
                swap[evenIndex--] = num;
            }
        }
        return swap;
    }

    public static void reorderArray2(int[] arr){//使用双指针直接修改数组元素，遇到奇数在后偶数在前的直接使用一个变量tem作为中间变量进行交换即可，但是给方法直接改变了数组内部的数据
        int i = 0;
        int j = arr.length - 1;
        int temp = 0;
        while(i<j){
            while(arr[i]%2 !=0&&i<=j){
                    i++;
                //如果奇数在前
            }
            while(arr[j]%2==0 && i<=j){
                    j--;
                //如果偶数在后
            }
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数组的长度:");
        int length = scanner.nextInt();
        int[] arr = new int[length];
        System.out.println("请输入数组的元素:");
        for(int i = 0;i<length;i++){
            arr[i] = scanner.nextInt();
        }
        System.out.println("您输入的数组为:"+Arrays.toString(arr));
        System.out.println("使用法一调整数组顺序之后的数组为:"+Arrays.toString(reorderArray(arr)));
        reorderArray2(arr);
        System.out.print("使用法二调整数组顺序之后的数组为:"+Arrays.toString(arr));
    }
}



//扩展：如果要求调整数组顺序使得奇数位于偶数之前，并且奇数和偶数之间的相对顺序不变，可以使用双指针法。
//调整数组顺序使得奇数位于偶数之前。调整之后，不关心大小顺序。
//如数组：[1,2,3,4,5,6]
//调整后可能是：[1,3,5,2,4,6]

//import java.util.Arrays;
//import java.util.Scanner;
//
//public class time_2025_07_16调整数组顺序 {
//
//    public static int[] reorderArray(int[] arr){
//        int[] swap = new int[arr.length];
//        int oddIndex = 0; // 奇数的索引
//        for(int num:arr){
//            if(num%2!=0){//先把奇数放到新数组里
//                swap[oddIndex++] = num;
//            }
//        }
//        int evenIndex = oddIndex; // 偶数的索引，从奇数结束的位置开始
//        for(int num:arr){
//            if(num%2==0){
//                swap[evenIndex++] = num; // 再把偶数放到新数组里
//            }
//        }
//        return swap;
//    }
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        System.out.println("请输入数组的长度:");
//        int length = scanner.nextInt();
//        int[] arr = new int[length];
//        System.out.println("请输入数组的元素:");
//        for (int i = 0; i < length; i++) {
//            arr[i] = scanner.nextInt();
//        }
//
//        System.out.print("您输入的数组为:");
//        System.out.println(Arrays.toString(arr));//toString方法可以直接输出数组元素
//
//        // 调整数组顺序
//        int[] result = reorderArray(arr);
//
//        System.out.print("调整数组顺序之后的数组为:"+Arrays.toString(result));
//    }
//}
